﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace Shop_Manager
{
    public partial class frmMatHang : Form
    {
        public frmMatHang()
        {
            InitializeComponent();
        }

        private bool kt;
        private int functionType = 0;

        private void frmMatHang_Load(object sender, EventArgs e)
        {
            HienThi();
            fillCombobox();
            
            txtMaHang.Text = "";
            txtSoLuong.Text = "";
            txtDonVi.Text = "";
            txtTenHang.Text = "";
            txtGiaBanRa.Text = "";
            txtGiaNhapVao.Text = "";
            

            btnSave.Enabled = false;
            btnXoa.Enabled = false;
            btnThoat.Enabled = true;

            txtMaHang.Focus();
        }

        private void HienThi()
        {
            DataSet ds = DataConn.procedureSelectCommand("selectAll_MatHang");
            if (ds != null && ds.Tables[0].Rows.Count > 0)
            {
                grdKq.DataSource = ds.Tables[0];
                grdKq.Refresh();
            }
            
        }

        private void fillCombobox()
        {

            DataSet ds = DataConn.procedureSelectCommand("getMaNhomHang");
            cbbNhomHang.DataSource = ds.Tables[0];
            cbbNhomHang.DisplayMember = "TenNH";
            cbbNhomHang.ValueMember = "MaNH";
        }
        

        

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        //save enter
        

        //save click
        private void btnSave_Click(object sender, EventArgs e)
        {
            

            DialogResult dialogResult = MessageBox.Show("Bán có chắc muốn lưu thông tin", "lưu dữ liệu", MessageBoxButtons.YesNo);
            if (dialogResult == DialogResult.Yes)
            {
                if (kt == true)
                {
                    //thêm mới

                    SqlParameter[] parameters = { 
                        new SqlParameter("@mamath", SqlDbType.NVarChar,50),
                        new SqlParameter("@manhomhang", SqlDbType.NVarChar,50),
                        new SqlParameter("@tenmath", SqlDbType.NVarChar,2000),
                        new SqlParameter("@soluong", SqlDbType.Float),
                        new SqlParameter("@dongia", SqlDbType.Float),
                        new SqlParameter("@giaban", SqlDbType.Float),
                        new SqlParameter("@hansudung", SqlDbType.DateTime),
                        new SqlParameter("@donvi", SqlDbType.NVarChar,50)
                    };

                    DateTime dt = dtpHanSuDung.Value;
                    parameters[0].Value = txtMaHang.Text;
                    parameters[1].Value = cbbNhomHang.SelectedValue;
                    parameters[2].Value = txtTenHang.Text;
                    parameters[3].Value = double.Parse(txtSoLuong.Text);
                    parameters[4].Value = double.Parse(txtGiaNhapVao.Text);
                    parameters[5].Value = double.Parse(txtGiaBanRa.Text);
                    parameters[6].Value = dt;
                    parameters[7].Value = txtMaHang.Text;

                    DataConn.procedureInsertUpdateDelete("InsertMatHang", parameters);
                    HienThi();
                }
                else
                {
                    //cập nhật
                    SqlParameter[] parameters = { 
                        new SqlParameter("@maMh", SqlDbType.NVarChar,50),
                        new SqlParameter("@donvi", SqlDbType.NVarChar,50),
                        new SqlParameter("@tenmh", SqlDbType.NVarChar,2000),
                        new SqlParameter("@soluongkho", SqlDbType.Float),
                        new SqlParameter("@gianhapvao", SqlDbType.Float),
                        new SqlParameter("@giabanra", SqlDbType.Float),
                        new SqlParameter("@maNh", SqlDbType.NVarChar,50),
                        new SqlParameter("@hanSuDung", SqlDbType.DateTime)
                    };

                    DateTime dt = dtpHanSuDung.Value;
                    parameters[0].Value = txtMaHang.Text;
                    parameters[1].Value = txtDonVi.Text;
                    parameters[2].Value = txtTenHang.Text;
                    parameters[3].Value = int.Parse(txtSoLuong.Text);
                    parameters[4].Value = double.Parse(txtGiaNhapVao.Text);
                    parameters[5].Value = double.Parse(txtGiaBanRa.Text);
                    parameters[6].Value = cbbNhomHang.SelectedValue;
                    parameters[7].Value = dt;

                    DataConn.procedureInsertUpdateDelete("updateTblMatHangByMaMH", parameters);
                    HienThi();
                }
            }
            else if (dialogResult == DialogResult.No)
            {
                //không save dữ liệu
                txtMaHang.Focus();
            }
        }


        private void btnXoa_Click(object sender, EventArgs e)
        {
            //try
            //{
            //    string select1 = "select MaMatH from tblChiTietHDN";
            //    SqlDataReader dr = DataConn.ThucHienReader(select1);
            //    if (dr != null)
            //    {
            //        while (dr.Read())
            //        {
            //            if (dr.GetString(0) == txtMaHang.Text)
            //            {
            //                dr.Close();
            //                dr.Dispose();
            //                throw new SameKeyException();
            //            }
            //        }
            //    }
            //    dr.Close();
            //    dr.Dispose();

            //    select1 = "select MaMatH from tblChiTietHDX";
            //    SqlDataReader dr1 = DataConn.ThucHienReader(select1);
            //    if (dr1 != null)
            //    {
            //        while (dr1.Read())
            //        {
            //            if (dr1.GetString(0) == txtMaHang.Text)
            //            {
            //                dr1.Close();
            //                dr1.Dispose();
            //                throw new SameKeyException();
            //            }
            //        }
            //    }
            //    dr1.Close();
            //    dr1.Dispose();

            //    select1 = "select MaMatH from tblNhaCungCap";
            //    SqlDataReader dr2 = DataConn.ThucHienReader(select1);
            //    if (dr2 != null)
            //    {
            //        while (dr2.Read())
            //        {
            //            if (dr2.GetString(0) == txtMaHang.Text)
            //            {
            //                dr2.Close();
            //                dr2.Dispose();
            //                throw new SameKeyException();
            //            }
            //        }
            //    }
            //    dr2.Close();
            //    dr2.Dispose();

            //    select1 = "select MaMatH from tblDatHangCT";
            //    SqlDataReader dr3 = DataConn.ThucHienReader(select1);
            //    if (dr3 != null)
            //    {
            //        while (dr3.Read())
            //        {
            //            if (dr3.GetString(0) == txtMaHang.Text)
            //            {
            //                dr3.Close();
            //                dr3.Dispose();
            //                throw new SameKeyException();
            //            }
            //        }
            //    }
            //    dr3.Close();
            //    dr3.Dispose();

            //    string delete = "DELETE tblMatHang WHERE MaMatH=N'" + txtMaHang.Text + "'";
            //    DataConn.ThucHienCmd(delete);
            //    HienThi();
            //}
            //catch (SameKeyException)
            //{
            //    MessageBox.Show("Có thể có hóa đơn, nhà cung cấp hoặc phiếu đặt hàng liên quan đến mặt hàng này! Bạn hãy xóa hóa đơn, nhà cung cấp hoặc phiếu đặt hàng liên quan!", "Chú ý!");
            //}
        }
        
        //EVENT KEY DOWN ******************************

        private void btnSave_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnSave_Click(sender,e);
            }
        }

        private void txtMaHang_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                txtMaHang_Leave(sender, e);
            }


              
        }

        private void txtTenHang_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (txtTenHang.Text != String.Empty)
                {
                    txtSoLuong.Focus();
                }
                else
                {
                    MessageBox.Show("Bạn chưa nhập tên mặt hàng!!");
                    txtTenHang.Focus();
                }
            }
        }

        private void txtSoLuong_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (txtSoLuong.Text != String.Empty)
                {
                    txtGiaNhapVao.Focus();
                }
                else
                {
                    MessageBox.Show("Bạn chưa nhập Số lượng!!");
                    txtSoLuong.Focus();
                }
            }
        }

        private void txtGiaNhapVao_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (txtGiaNhapVao.Text != String.Empty)
                {
                    txtGiaBanRa.Focus();
                }
                else
                {
                    MessageBox.Show("Bạn chưa nhập Giá nhập vào của mặt hàng!!");
                    txtGiaNhapVao.Focus();
                }
            }
        }

        private void txtGiaBanRa_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (txtGiaBanRa.Text != String.Empty)
                {
                    if (kt == true)
                    {
                        txtDonVi.Focus();
                    }
                    else
                    {
                        cbbNhomHang.Focus();
                    }
                    
                }
                else
                {
                    MessageBox.Show("Bạn chưa nhập Giá bán ra của mặt hàng!!");
                    txtGiaBanRa.Focus();
                }
            }
        }

        private void txtDonVi_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (txtDonVi.Text != String.Empty)
                {
                    cbbNhomHang.Focus();
                }
                else
                {
                    MessageBox.Show("Bạn chưa nhập Giá bán ra của mặt hàng!!");
                    txtDonVi.Focus();
                }
            }
        }

        private void cbbNhomHang_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                dtpHanSuDung.Focus();
            }
        }

        private void dtpHanSuDung_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnSave.Focus();
            }
        }

        private void grdKq_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
            {
                if (grdKq.DataSource != null && grdKq.RowCount > 0)
                {
                    kt = false;
                    //MessageBox.Show(grdKq.Rows[e.RowIndex].Cells["Mã hàng"].Value.ToString(), "");
                    txtMaHang.Text = grdKq.Rows[e.RowIndex].Cells["Mã hàng"].Value.ToString();
                    txtSoLuong.Text = grdKq.Rows[e.RowIndex].Cells["Số lượng trong kho"].Value.ToString();
                    txtTenHang.Text = grdKq.Rows[e.RowIndex].Cells["Tên mặt hàng"].Value.ToString();
                    txtGiaNhapVao.Text = grdKq.Rows[e.RowIndex].Cells["Giá nhập vào"].Value.ToString();
                    txtGiaBanRa.Text = grdKq.Rows[e.RowIndex].Cells["Giá bán ra"].Value.ToString();
                    txtDonVi.Text = grdKq.Rows[e.RowIndex].Cells["Đơn vị"].Value.ToString();
                    cbbNhomHang.SelectedIndex = cbbNhomHang.FindStringExact(grdKq.Rows[e.RowIndex].Cells["Nhóm hàng"].Value.ToString());
                    dtpHanSuDung.Value = DateTime.Parse(grdKq.Rows[e.RowIndex].Cells["Hạn sử dụng"].Value.ToString());
                }
            }
        }

        private void txtMaHang_TextChanged(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(txtMaHang.Text) || String.IsNullOrEmpty(txtSoLuong.Text) || String.IsNullOrEmpty(txtTenHang.Text) || String.IsNullOrEmpty(txtGiaNhapVao.Text) || String.IsNullOrEmpty(txtGiaBanRa.Text) || String.IsNullOrEmpty(txtDonVi.Text))
            {
                btnSave.Enabled = false;
            }
            else
            {
                btnSave.Enabled = true;
            }
        }

        private void txtSoLuong_TextChanged(object sender, EventArgs e)
        {
            Regex regex1 = new Regex(@"^[0-9]+$");
            Match match1 = regex1.Match(txtSoLuong.Text);
            
            
            if (String.IsNullOrEmpty(txtMaHang.Text) || String.IsNullOrEmpty(txtSoLuong.Text) || String.IsNullOrEmpty(txtTenHang.Text) || String.IsNullOrEmpty(txtGiaNhapVao.Text) || String.IsNullOrEmpty(txtGiaBanRa.Text) || String.IsNullOrEmpty(txtDonVi.Text))
            {
                btnSave.Enabled = false;
            }
            else
            {
                if (match1.Success)
                {
                    btnSave.Enabled = true;
                }
                else
                {
                    btnSave.Enabled = false;
                    txtSoLuong.Focus();
                }
                
            }
        }

        private void txtDonVi_TextChanged(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(txtMaHang.Text) || String.IsNullOrEmpty(txtSoLuong.Text) || String.IsNullOrEmpty(txtTenHang.Text) || String.IsNullOrEmpty(txtGiaNhapVao.Text) || String.IsNullOrEmpty(txtGiaBanRa.Text) || String.IsNullOrEmpty(txtDonVi.Text))
            {
                
                btnSave.Enabled = false;
            }
            else
            {
                btnSave.Enabled = true;
            }
        }

        private void txtTenHang_TextChanged(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(txtMaHang.Text) || String.IsNullOrEmpty(txtSoLuong.Text) || String.IsNullOrEmpty(txtTenHang.Text) || String.IsNullOrEmpty(txtGiaNhapVao.Text) || String.IsNullOrEmpty(txtGiaBanRa.Text) || String.IsNullOrEmpty(txtDonVi.Text))
            {
                
                btnSave.Enabled = false;
            }
            else
            {
                btnSave.Enabled = true;
            }
        }

        private void txtGiaNhapVao_TextChanged(object sender, EventArgs e)
        {
            Regex regex1 = new Regex(@"^[0-9]+$");
            Match match2 = regex1.Match(txtGiaNhapVao.Text);
            

            if (String.IsNullOrEmpty(txtMaHang.Text) || String.IsNullOrEmpty(txtSoLuong.Text) || String.IsNullOrEmpty(txtTenHang.Text) || String.IsNullOrEmpty(txtGiaNhapVao.Text) || String.IsNullOrEmpty(txtGiaBanRa.Text) || String.IsNullOrEmpty(txtDonVi.Text))
            {
               
                btnSave.Enabled = false;
            }
            else
            {
                if (match2.Success)
                {
                    btnSave.Enabled = true;
                }
                else
                {
                    
                    btnSave.Enabled = false;
                    txtGiaNhapVao.Focus();
                }
                
            }
        }

        private void txtGiaBanRa_TextChanged(object sender, EventArgs e)
        {
            Regex regex1 = new Regex(@"^[0-9]+$");
            Match match3 = regex1.Match(txtGiaBanRa.Text);

            if (String.IsNullOrEmpty(txtMaHang.Text) || String.IsNullOrEmpty(txtSoLuong.Text) || String.IsNullOrEmpty(txtTenHang.Text) || String.IsNullOrEmpty(txtGiaNhapVao.Text) || String.IsNullOrEmpty(txtGiaBanRa.Text) || String.IsNullOrEmpty(txtDonVi.Text))
            {
                btnSave.Enabled = false;
            }
            else
            {
                if (match3.Success)
                {
                    btnSave.Enabled = true;
                }
                else
                {
                    btnSave.Enabled = false;
                    txtGiaBanRa.Focus();
                }
                
            }
        }

        private void txtMaHang_Leave(object sender, EventArgs e)
        {
            SqlParameter[] parameters = { new SqlParameter("@mamh", SqlDbType.NVarChar, 50) };
            parameters[0].Value = txtMaHang.Text;

            //SqlDataReader dr = DataConn.procedureSelectHaveParametersReturnDataReader("selectMatHangByMaMH", parameters);
            DataSet ds = DataConn.procedureSelectCommandHaveParameters("selectMatHangByMaMH", parameters);
            if (ds != null && ds.Tables[0].Rows.Count > 0)
            {
                //trường hợp này mặt hàng đã tồn tại, chỉ phải update.
                //kt dùng để kiểm tra xem là thêm mới hay là update, bằng true là thêm mới, false là update.
                kt = false; //trường hợp này là update.
                txtSoLuong.Text = ds.Tables[0].Rows[0]["Số lượng trong kho"].ToString();
                txtTenHang.Text = ds.Tables[0].Rows[0]["Tên mặt hàng"].ToString();
                txtGiaNhapVao.Text = ds.Tables[0].Rows[0]["Giá nhập vào"].ToString();
                txtGiaBanRa.Text = ds.Tables[0].Rows[0]["Giá bán ra"].ToString();
                txtDonVi.Text = ds.Tables[0].Rows[0]["Đơn vị"].ToString();
                cbbNhomHang.SelectedIndex = cbbNhomHang.FindStringExact(ds.Tables[0].Rows[0]["Nhóm hàng"].ToString());
                dtpHanSuDung.Value = DateTime.Parse(ds.Tables[0].Rows[0]["Hạn sử dụng"].ToString());

                txtTenHang.Enabled = false;
                txtGiaBanRa.Enabled = true;
                txtGiaNhapVao.Enabled = true;
                txtDonVi.Enabled = false;
                cbbNhomHang.Enabled = true;
                txtSoLuong.Enabled = true;
                dtpHanSuDung.Enabled = true;

                txtSoLuong.Focus();
            }
            else
            {
                //trường hợp này mặt hàng chưa có, phải thêm mới
                kt = true; //trường hợp này là thêm mới
                MessageBox.Show("Mặt hàng này chưa có trong kho, hệ thống sẽ cho phép bạn thêm mới mặt hàng này!!");
                txtTenHang.Text = "";
                txtSoLuong.Text = "";
                txtGiaBanRa.Text = "";
                txtGiaNhapVao.Text = "";
                txtDonVi.Text = "";

                txtTenHang.Enabled = true;
                txtDonVi.Enabled = true;
                txtSoLuong.Enabled = true;
                txtGiaBanRa.Enabled = true;
                txtGiaNhapVao.Enabled = true;
                cbbNhomHang.Enabled = true;
                dtpHanSuDung.Enabled = true;
                txtTenHang.Focus();
            }
        }

    }
}